﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EstructurasDeDatos.EstructuraGrafo;
using Turismo.Negocio.EntidadesGeometricas;
using Persistencia.NHibernate;
using GeoAPI.Geometries;
using GisSharpBlog.NetTopologySuite.Geometries;

namespace Turismo.Negocio.Util
{
    public class PersistenciaNodoGrafo
    {
        public PersistenciaNodoGrafo()
        {

        }

        public void PersistirNodoGrafo(List<NodoGrafo<Cabecera, Medio>> listaNodos)
        {
            BorrarDatosTablaRespuesta();
            IGeometry ultimaCabecera = listaNodos.First().Valor.Geometria;
            int contador = 0;
            foreach (var item in listaNodos)
            {   
                if (contador>0)
                {
                    Respuesta respuesta = new Respuesta();
                    respuesta.Dia = item.Medio.Dia;
                    respuesta.Hora = item.Medio.Hora;
                    respuesta.Precio = item.Medio.Precio;
                    IList<ICoordinate> coordenadas = new List<ICoordinate>();
                    coordenadas.Add(item.Valor.Geometria.Coordinate);
                    coordenadas.Add(ultimaCabecera.Coordinate);
                    respuesta.Geometria = new LineString(coordenadas.ToArray());
                    ultimaCabecera = item.Valor.Geometria;
                    if (item.Medio is Servicio)
                    {
                        Servicio servicio = (Servicio)item.Medio;
                        respuesta.Clase = servicio.Clase;
                        respuesta.NombreOperador = servicio.Operador.Nombre;
                    }
                    if (item.Medio is Vuelo)
                    {
                        Vuelo servicio = (Vuelo)item.Medio;
                        respuesta.Clase = servicio.Clase;
                        respuesta.NombreOperador = servicio.Operador.Nombre;
                    }
                    try
                    {
                        NHibernatePersistencia.Instancia.IniciarTransaccion();
                        NHibernatePersistencia.Instancia.Persistir(respuesta);
                        NHibernatePersistencia.Instancia.AceptarTransaccion();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }          
                    
                }  
                
                contador++;
               
                
            }   
        
        }


        public void BorrarDatosTablaRespuesta()
        {
            List<Respuesta> listaRespuesta = NHibernatePersistencia.Instancia.Listar<Respuesta>().ToList();
            try
            {
                NHibernatePersistencia.Instancia.IniciarTransaccion();
                foreach (var item in listaRespuesta)
                {
                    NHibernatePersistencia.Instancia.Eliminar<Respuesta>(item);
                }
                NHibernatePersistencia.Instancia.AceptarTransaccion();
            }
            catch (Exception)
            {
                NHibernatePersistencia.Instancia.CancelarTransaccion();
                throw;
            }
            
        }
    }
}
